package com.example.tencentTrain;

import java.util.Arrays;

/**
 * 给你一个正整数 n ，生成一个包含 1 到 n2 所有元素，且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
 *
 *  示例 1：
 * 输入：n = 3
 * 输出：[
 *  [1,2,3],
 *  [8,9,4],
 *  [7,6,5]]
 *
 *  示例 2：
 * 输入：n = 1
 * 输出：[[1]]
 */
public class Leetcode59_GenerateMatrix {
    public static void main(String[] args) {

        int[][] res = new Solution().generateMatrix(5);
        for (int[] re : res) {
            System.out.println(Arrays.toString(re));
        }
    }

    static class Solution {
        public int[][] generateMatrix(int n) {
            int[][] matrix = new int[n][n];
            int count = 1;
            int rows = matrix.length, columns = matrix[0].length;
            int left = 0, right = columns - 1, top = 0, bottom = rows - 1;

            while (left <= right && top <= bottom) {
                for (int column = left; column <= right; column++) {
                    matrix[top][column] = count++;
                }

                // 从上到下
                for (int row = top + 1; row <= bottom; row++) {
                    matrix[row][right] = count++;
                }

                if (left < right && top < bottom) {
                    // 从右到左
                    for (int column = right - 1; column > left; column--) {
                        matrix[bottom][column] = count++;
                    }
                    // 从下到上
                    for (int row = bottom; row > top; row--) {
                        matrix[row][left] = count++;
                    }
                }

                left++;
                right--;
                top++;
                bottom--;
            }

            return matrix;
        }
    }
}
